package com.yfree.utils;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;

import com.yfree.R;

import java.io.File;

public class YFileUtils {
	// android获取一个用于打开HTML文件的intent
	public static Intent getHtmlFileIntent(File file) {
		Uri uri = Uri.parse(file.toString()).buildUpon()
				.encodedAuthority("com.android.htmlfileprovider")
				.scheme("content").encodedPath(file.toString()).build();
		Intent intent = new Intent("android.yIntent.action.VIEW");
		intent.setDataAndType(uri, "text/html");
		return intent;
	}

	// android获取一个用于打开图片文件的intent
	public static Intent getImageFileIntent(File file) {
		Intent intent = new Intent("android.yIntent.action.VIEW");
		intent.addCategory("android.yIntent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(file);
		intent.setDataAndType(uri, "image/*");
		return intent;
	}

	// android获取一个用于打开PDF文件的intent
	public static Intent getPdfFileIntent(File file) {
		Intent intent = new Intent("android.yIntent.action.VIEW");
		intent.addCategory("android.yIntent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(file);
		intent.setDataAndType(uri, "yApplication/pdf");
		return intent;
	}

	// android获取一个用于打开文本文件的intent
	public static Intent getTextFileIntent(File file) {
		Intent intent = new Intent("android.yIntent.action.VIEW");
		intent.addCategory("android.yIntent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(file);
		intent.setDataAndType(uri, "text/plain");
		return intent;
	}

	// android获取一个用于打开音频文件的intent
	public static Intent getAudioFileIntent(File file) {
		Intent intent = new Intent("android.yIntent.action.VIEW");
		intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		intent.putExtra("oneshot", 0);
		intent.putExtra("configchange", 0);
		Uri uri = Uri.fromFile(file);
		intent.setDataAndType(uri, "audio/*");
		return intent;
	}

	// android获取一个用于打开视频文件的intent
	public static Intent getVideoFileIntent(File file) {
		Intent intent = new Intent("android.yIntent.action.VIEW");
		intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		intent.putExtra("oneshot", 0);
		intent.putExtra("configchange", 0);
		Uri uri = Uri.fromFile(file);
		intent.setDataAndType(uri, "video/*");
		return intent;
	}

	// android获取一个用于打开CHM文件的intent
	public static Intent getChmFileIntent(File file) {
		Intent intent = new Intent("android.yIntent.action.VIEW");
		intent.addCategory("android.yIntent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(file);
		intent.setDataAndType(uri, "yApplication/x-chm");
		return intent;
	}

	// android获取一个用于打开Word文件的intent
	public static Intent getWordFileIntent(File file) {
		Intent intent = new Intent("android.yIntent.action.VIEW");
		intent.addCategory("android.yIntent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(file);
		intent.setDataAndType(uri, "yApplication/msword");
		return intent;
	}

	// android获取一个用于打开Excel文件的intent
	public static Intent getExcelFileIntent(File file) {
		Intent intent = new Intent("android.yIntent.action.VIEW");
		intent.addCategory("android.yIntent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(file);
		intent.setDataAndType(uri, "yApplication/vnd.ms-excel");
		return intent;
	}

	// android获取一个用于打开PPT文件的intent
	public static Intent getPPTFileIntent(File file) {
		Intent intent = new Intent("android.yIntent.action.VIEW");
		intent.addCategory("android.yIntent.category.DEFAULT");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		Uri uri = Uri.fromFile(file);
		intent.setDataAndType(uri, "yApplication/vnd.ms-powerpoint");
		return intent;
	}

	// android获取一个用于打开apk文件的intent
	public static Intent getApkFileIntent(File file) {
		Intent intent = new Intent();
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		intent.setAction(Intent.ACTION_VIEW);
		intent.setDataAndType(Uri.fromFile(file),
				"yApplication/vnd.android.package-archive");
		return intent;
	}

	private static boolean checkEndsWithInStringArray(String checkItsEnd,
													  String[] fileEndings) {
		for (String aEnd : fileEndings) {
			if (checkItsEnd.endsWith(aEnd))
				return true;
		}
		return false;
	}

	public static void openFile(Context context, File file) {
		try {
			if (file != null && file.isFile()) {
				String fileName = file.getName();
				Intent intent;
				if (checkEndsWithInStringArray(fileName, context.getResources()
						.getStringArray(R.array.fileEndingImage))) {
					intent = getImageFileIntent(file);
					context.startActivity(intent);
				} else if (checkEndsWithInStringArray(
						fileName,
						context.getResources().getStringArray(
								R.array.fileEndingWebText))) {
					intent = getHtmlFileIntent(file);
					context.startActivity(intent);
				} else if (checkEndsWithInStringArray(
						fileName,
						context.getResources().getStringArray(
								R.array.fileEndingPackage))) {
					intent = getApkFileIntent(file);
					context.startActivity(intent);
				} else if (checkEndsWithInStringArray(fileName, context
						.getResources().getStringArray(R.array.fileEndingAudio))) {
					intent = getAudioFileIntent(file);
					context.startActivity(intent);
				} else if (checkEndsWithInStringArray(fileName, context
						.getResources().getStringArray(R.array.fileEndingVideo))) {
					intent = getVideoFileIntent(file);
					context.startActivity(intent);
				} else if (checkEndsWithInStringArray(fileName, context
						.getResources().getStringArray(R.array.fileEndingText))) {
					intent = getTextFileIntent(file);
					context.startActivity(intent);
				} else if (checkEndsWithInStringArray(fileName, context
						.getResources().getStringArray(R.array.fileEndingPdf))) {
					intent = getPdfFileIntent(file);
					context.startActivity(intent);
				} else if (checkEndsWithInStringArray(fileName, context
						.getResources().getStringArray(R.array.fileEndingWord))) {
					intent = getWordFileIntent(file);
					context.startActivity(intent);
				} else if (checkEndsWithInStringArray(fileName, context
						.getResources().getStringArray(R.array.fileEndingExcel))) {
					intent = getExcelFileIntent(file);
					context.startActivity(intent);
				} else if (checkEndsWithInStringArray(fileName, context
						.getResources().getStringArray(R.array.fileEndingPPT))) {
					intent = getPPTFileIntent(file);
					context.startActivity(intent);
				} else {
					YToastUtils.toast(context, "该文件类型不支持");
				}
			}
		} catch (Exception e) {
			YToastUtils.toast(context, "该文件类型不支持");
		}
	}
}